﻿Imports Entidad
Imports Negocio
Imports Utilitario

Public Class frmPedidosAsignados

    Dim servicio1 As New DocumentoAlmacenDetallePickeadorUbicacionBandejaNegocio
    Dim servicio2 As New DocumentoClienteBalanzaNegocio
    Dim servicio3 As New CajaNegocio
    Dim servicio4 As New DocumentoClienteBultoNegocio
    Dim servicio5 As New DocumentoClienteBultoDetalleNegocio
    Dim servicio6 As New DocumentoClienteBultoDADPUBNegocio
    Dim servicio7 As New BarraNegocio
    Dim servicio8 As New ArticuloNegocio
    Dim servicio9 As New DocumentoClienteNegocio
    Dim servicio10 As New BalanzaNegocio

    Dim CIA As String = "01"
    Dim SUC As String = "01"
    Dim TDOC As String = "P"
    Dim seleccion As Integer
    Dim seleccion2 As Integer
    Dim bultoCodigo As Integer
    Dim contador2 As Integer = 0
    Dim presionado As Boolean = False

    Dim columnas As New DataTable

    Sub mensaje(ByVal men As String)
        MsgBox(men, MsgBoxStyle.Information, "Mensajes al Usuario")
    End Sub

    Sub cargarBandejas(codigoArticulo As String)
        frmBandeja.clbBandejas.Items.Clear()
        For Each fila As DataGridViewRow In dgvArticulos.Rows
            If fila.Cells("clm5").Value = codigoArticulo Then
                frmBandeja.clbBandejas.Items.Add(fila.Cells("clm7").Value)
            End If
        Next
    End Sub

    Sub activarCabeceraBulto()
        gbBulto.Enabled = True
        btnEliminar1.Enabled = False
        btnEliminar2.Enabled = True
    End Sub

    Sub limpiar()
        cboCajas.SelectedIndex = 0
        lblBandejas.Text = ""
        txtCantidad.Text = ""
        txtCaja.Text = ""
        txtPrecinto.Text = ""
        txtPesoBruto.Text = ""
        txtPesoNeto.Text = ""
        txtObservaciones.Text = ""
        dgvBultos1.Rows.Clear()
        listarBultos(txtPedido.Text.Trim)
    End Sub

    Sub agregar(indiceArt As Integer, eliminaArt As Boolean, indiceArtBul As Integer, cantidad As Decimal)
        Dim ArtBarra As ArticuloCodigoBarra = servicio7.obtenerDatosBarra(dgvArticulos.Item("clm5", indiceArt).Value)
        If indiceArtBul = -1 Then
            dgvBultos1.Rows.Add(dgvArticulos.Item("clm2", indiceArt).Value, cantidad, ArtBarra.ART_Codigo, dgvArticulos.Item("clm6", indiceArt).Value, dgvArticulos.Item("clm7", indiceArt).Value, dgvArticulos.Item("clm3", indiceArt).Value, dgvArticulos.Item("clm8", indiceArt).Value)
            If dgvBultos1.Rows.Count <> 0 Then
                dgvBultos1.Rows(0).Selected = False
            End If
            If fechaRegistro = "" Then
                fechaRegistro = Date.Now.ToString("dd/MM/yyyy HH:mm:ss")
            End If
        Else
            dgvBultos1.Item("Column3", indiceArtBul).Value = CDec(dgvBultos1.Item("Column3", indiceArtBul).Value) + cantidad
        End If
        If eliminaArt Then
            dgvArticulos.Rows.RemoveAt(indiceArt)
        Else
            dgvArticulos.Item("clm4", indiceArt).Value = CDec(dgvArticulos.Item("clm4", indiceArt).Value) - cantidad
            If dgvArticulos.RowCount = 0 Then
                chkManual.Checked = False
            End If
        End If
    End Sub

    Sub eliminar01()
        If dgvArticulos.Rows.Count = 0 Then

            dgvArticulos.Rows.Add(False, dgvBultos1.Item("Column2", seleccion2).Value, dgvBultos1.Item("Column7", seleccion2).Value, dgvBultos1.Item("Column6", seleccion2).Value, dgvBultos1.Item("Column3", seleccion2).Value, dgvBultos1.Item("Column4", seleccion2).Value, dgvBultos1.Item("Column8", seleccion2).Value, dgvBultos1.Item("Column5", seleccion2).Value)

            If dgvArticulos.RowCount <> 0 Then
                dgvArticulos.Rows(0).Selected = False
            End If
        Else
            For Each fila2 As DataGridViewRow In dgvArticulos.Rows
                If fila2.Cells("clm2").Value = dgvBultos1.Item("Column2", seleccion2).Value And
                   fila2.Cells("clm7").Value = dgvBultos1.Item("Column6", seleccion2).Value Then
                    contador2 = contador2 + 1
                End If
            Next
            If contador2 = 0 Then

                dgvArticulos.Rows.Add(False, dgvBultos1.Item("Column2", seleccion2).Value, dgvBultos1.Item("Column7", seleccion2).Value, dgvBultos1.Item("Column6", seleccion2).Value, dgvBultos1.Item("Column3", seleccion2).Value, dgvBultos1.Item("Column4", seleccion2).Value, dgvBultos1.Item("Column8", seleccion2).Value, dgvBultos1.Item("Column5", seleccion2).Value)

                If dgvArticulos.RowCount <> 0 Then
                    dgvArticulos.Rows(0).Selected = False
                End If
            Else
                For Each fila2 As DataGridViewRow In dgvArticulos.Rows
                    If fila2.Cells("clm2").Value = dgvBultos1.Item("Column2", seleccion2).Value And
                       fila2.Cells("clm7").Value = dgvBultos1.Item("Column6", seleccion2).Value Then
                        fila2.Cells("clm4").Value = CDec(fila2.Cells("clm4").Value) + CDec(dgvBultos1.Item("Column3", seleccion2).Value)
                    End If
                Next
            End If
        End If
        contador2 = 0
        dgvBultos1.Rows.RemoveAt(seleccion2)
        txtCodArticulo.Focus()
    End Sub

    Sub eliminar02()
        Dim generico As New Generico(txtPedido.Text, bultoCodigo, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
        servicio5.eliminarCTRG02(generico)
        servicio4.eliminarCTRG01(generico)
        servicio4.desactivarBultos(bultoCodigo)
        mensaje("El bulto se eliminó correctamente.")
        dgvBultos1.Rows.Clear()
        dgvArticulos.Rows.Clear()
        listarBultos(txtPedido.Text.Trim)
        listarArticulosXBandejaXPedido()
        presionado = False
    End Sub

    Sub listarBultos(pedido As String)
        Dim ds As DataSet = servicio4.listarBultosRegistrados(pedido)
        dgvBultosRegistrados.DataSource = ds.Tables(0)

        If dgvBultosRegistrados.RowCount <> 0 Then
            dgvBultosRegistrados.Rows(0).Selected = False
        End If
    End Sub

    Sub generarBulto()
        '----------- Se registra la cabecera del Bulto ---------------------------------
        Dim dcbCodigo As Integer = servicio4.generarCodigoBulto()
        servicio10.actualizarFechaBalanza("P", txtPedido.Text.Trim)
        Dim bulto As New DocumentoBulto(CIA, SUC, TDOC, txtPedido.Text.Trim, dcbCodigo, cboCajas.SelectedValue.ToString, CInt(txtCantidad.Text.Trim), _
                                        CDec(txtPesoNeto.Text.Trim), CDec(txtPesoBruto.Text.Trim), txtCaja.Text.Trim, txtPrecinto.Text.Trim, _
                                        txtObservaciones.Text.Trim, fechaRegistro)
        servicio4.registrarDocumentoBulto(bulto)

        '--------- Se registra en el CTRG01 -----------------------------------------------------------
        Dim generico1 As New Generico(txtPedido.Text, dcbCodigo, Nothing, Nothing, CInt(txtCantidad.Text.Trim), CDec(txtPesoNeto.Text.Trim), CDec(txtPesoBruto.Text.Trim), txtCaja.Text.Trim & "/" & txtPrecinto.Text.Trim, txtObservaciones.Text.Trim)
        servicio4.registrarCTRG01(generico1)

        '---------- Se registra los detalles del bulto ----------------------------------
        For Each fila As DataGridViewRow In dgvBultos1.Rows
            Dim dbdCodigo As Integer = servicio5.generarCodigoBultoDetalle()
            Dim detalle As New DocumentoBultoDetalle(CIA, SUC, TDOC, txtPedido.Text.Trim, dcbCodigo, dbdCodigo, fila.Cells("Column4").Value, CDec(fila.Cells("Column3").Value))
            servicio5.registrarDocumentoBultoDetalle(detalle)

            '--------- Se registra en el CTRG01 -----------------------------------------------------------
            Dim generico2 As New Generico(txtPedido.Text, dcbCodigo, dbdCodigo, fila.Cells("Column4").Value, CDec(fila.Cells("Column3").Value), "01", 99, CDate(fechaRegistro).ToString("MM/dd/yyyy"), CDate(fechaRegistro).ToString("HH:mm:ss"), "", "")
            servicio5.registrarCTRG02(generico2)

            Dim bultoDADPB As New DocumentoClienteBultoDADPB(CIA, SUC, TDOC, txtPedido.Text.Trim, dcbCodigo, dbdCodigo, CInt(fila.Cells("Column5").Value), fila.Cells("Column6").Value)
            servicio6.registrarDocumentoClienteBultoDADPUB(bultoDADPB)
        Next
    End Sub

    Sub desactivarCheck()
        For Each fila As DataGridViewRow In dgvArticulos.Rows
            fila.Cells(0).Value = False
            dgvArticulos.EndEdit()
        Next
    End Sub

    Sub inicializar()
        Setup_Puerto_Serie()
        listarCajas()
        txtBandeja.Focus()
    End Sub

    Sub listarCajas()
        With cboCajas
            .DataSource = servicio3.listarCajas().Tables(0)
            .ValueMember = "TCA_Codigo"
            .DisplayMember = "TCA_Descripcion"
        End With
    End Sub

    Sub mostrarPedidoCantItemsXBandeja()
        Dim ds As DataSet = servicio1.obtenerDatosXBandeja(txtBandeja.Text.Trim, "07")
        If ds.Tables(0).Rows.Count = 0 Then
            txtPedido.Text = ""
            txtCantItems.Text = ""
        Else
            txtPedido.Text = ds.Tables(0).Rows(0)("Pedido").ToString.Trim
            txtCliente.Text = ds.Tables(0).Rows(0)("PRC_Descripcion").ToString.Trim
            If txtPedido.Text <> "" Then
                txtCantItems.Text = servicio1.obtenerCantidadItems(txtPedido.Text.Trim)
                txtLargos.Text = servicio1.obtenerCantidadItemsLargos(txtPedido.Text.Trim, "P")
            End If
        End If
    End Sub

    Sub listarArticulosXBandejaXPedido()
        Dim ds As DataSet = servicio1.obtenerArticulosBandejaPedido(txtPedido.Text.Trim)
        dgvArticulos.Rows.Clear()

        For i = 0 To ds.Tables(0).Rows.Count - 1
            dgvArticulos.Rows.Add(False, ds.Tables(0).Rows(i)("ART_Descripcion").ToString.Trim, ds.Tables(0).Rows(i)("ART_UM").ToString.Trim, ds.Tables(0).Rows(i)("BAN_Codigo").ToString.Trim, ds.Tables(0).Rows(i)("NAtendido").ToString.Trim, ds.Tables(0).Rows(i)("ART_Codigo").ToString.Trim, ds.Tables(0).Rows(i)("Atendido").ToString.Trim, ds.Tables(0).Rows(i)("DADP_Codigo").ToString.Trim)
        Next

        If dgvArticulos.RowCount <> 0 Then
            dgvArticulos.Rows(0).Selected = False
        End If
    End Sub

    Sub listarBalanzas()
        Dim ds As DataSet = servicio10.listarBalanzas("")
        With cboBalanza
            .DataSource = ds.Tables(0)
            .ValueMember = "BAL_Codigo"
            .DisplayMember = "BAL_Descripcion"
        End With
    End Sub

    Private Sub frmPedidosAsignados_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        inicializar()
        listarBultos(txtPedido.Text.Trim)
        dgvPedidosAsignados.RowHeadersVisible = False
        listarBalanzas()
        Control.CheckForIllegalCrossThreadCalls = False
    End Sub

    Private Sub txtBandeja_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtBandeja.KeyPress
        If e.KeyChar = ChrW(Keys.Enter) Then
            mostrarPedidoCantItemsXBandeja()
            If txtPedido.Text <> "" Then
                mostrarBandejas(txtPedido.Text)
                listarArticulosXBandejaXPedido()
                dgvBultos1.Rows.Clear()
                listarBultos(txtPedido.Text.Trim)
                fechaRegistro = ""
                txtCodArticulo.Focus()
            End If
        End If
    End Sub

    Private Sub dgvArticulos_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvArticulos.CellContentClick
        If dgvArticulos.RowCount <> 0 Then
            dgvArticulos.EndEdit()

            fil = e.RowIndex
            If fil > -1 Then
                If Convert.ToBoolean(dgvArticulos.Rows(fil).Cells(0).Value = True) Then
                    nombreArticulo = dgvArticulos.Item("clm2", fil).Value
                    nombreArticuloMuestra = "Artículo : " & dgvArticulos.Item("clm2", fil).Value & vbCrLf & "Bandeja : " & dgvArticulos.Item("clm7", fil).Value
                    frmConfirmacionBultos.lblCodArticulo.Text = dgvArticulos.Item("clm5", fil).Value
                    frmConfirmacionBultos.txtCantPedido.Text = dgvArticulos.Item("clm8", fil).Value
                    frmConfirmacionBultos.txtCantPickeada.Text = dgvArticulos.Item("clm4", fil).Value
                    dadpuCodigo = dgvArticulos.Item("clm6", fil).Value

                    frmConfirmacionBultos.txtCantBulto.Text = "0"
                    frmConfirmacionBultos.txtCantPendiente.Text = "0"
                    presiona = True

                    If frmConfirmacionBultos.ShowDialog() = Windows.Forms.DialogResult.OK Then
                        Dim beliminar As Boolean = False
                        If CDec(dgvArticulos.Item("clm4", fil).Value) - CDec(cantidad) = 0 Then
                            beliminar = True
                        End If
                        Dim i As Integer = 0
                        Dim indexArtBul As Integer = -1
                        For Each fila As DataGridViewRow In dgvBultos1.Rows
                            If fila.Cells("Column4").Value.ToString.Trim = dgvArticulos.Item("clm5", fil).Value And
                               fila.Cells("Column6").Value.ToString.Trim = dgvArticulos.Item("clm7", fil).Value Then
                                indexArtBul = i
                                Exit For
                            End If
                            i = i + 1
                        Next
                        agregar(fil, beliminar, indexArtBul, cantidad)
                        desactivarCheck()

                        If dgvArticulos.RowCount = 0 Then
                            chkManual.Checked = False
                        End If
                    Else
                        desactivarCheck()
                    End If

                    If dgvArticulos.RowCount <> 0 Then
                        dgvArticulos.Rows(0).Selected = False
                    End If
                End If
            End If
        End If
    End Sub

    Private Sub btnGenerarBulto_Click(sender As System.Object, e As System.EventArgs) Handles btnGenerarBulto.Click
        If txtCantidad.Text = "" Then
            mensaje("Se requiere de la cantidad para el bulto.")
            txtCantidad.Focus()
        ElseIf Not IsNumeric(txtCantidad.Text) Then
            mensaje("No se pueden ingresar letras.")
            txtCantidad.Text = ""
            txtCantidad.Focus()
        ElseIf CInt(txtCantidad.Text) < 0 Then
            mensaje("No se puede ingresar cantidad negativa.")
            txtCantidad.Text = ""
            txtCantidad.Focus()
        Else
            If txtPesoNeto.Text = "" Then
                mensaje("Ingrese el peso neto del bulto.")
                txtPesoNeto.Focus()
            ElseIf Not IsNumeric(txtPesoNeto.Text) Then
                mensaje("No se pueden ingresar letras.")
                txtPesoNeto.Text = ""
                txtPesoNeto.Focus()
            ElseIf CInt(txtPesoNeto.Text) < 0 Then
                mensaje("No se pueden ingresar peso negativo.")
                txtPesoNeto.Text = ""
                txtPesoNeto.Focus()
            Else
                If txtPesoBruto.Text = "" Then
                    mensaje("Ingrese el peso bruto del bulto.")
                    txtPesoBruto.Focus()
                ElseIf Not IsNumeric(txtPesoBruto.Text) Then
                    mensaje("No se pueden ingresar letras.")
                    txtPesoBruto.Text = ""
                    txtPesoBruto.Focus()
                ElseIf CInt(txtPesoBruto.Text) < 0 Then
                    mensaje("No se pueden ingresar peso negativo.")
                    txtPesoBruto.Text = ""
                    txtPesoBruto.Focus()
                Else
                    If dgvBultos1.Rows.Count = 0 Then
                        mensaje("No se puede registrar, no se ha ingresado ningún detalle.")
                    Else
                        If MsgBox("¿Esta seguro que desea generar el Bulto?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                            generarBulto()
                            mensaje("Se registró el bulto exitosamente.")
                            cambiarEstadoEmbalaje()
                            fechaRegistro = ""
                            chkBulto.Checked = False
                            limpiar()
                        End If
                    End If
                End If
            End If
        End If
    End Sub

    Sub imprimir(datoRuta As String, datoMarca As String, datoBarra As String, nroPedido As String, _
                 datoDistrito As String, datoAgencia As String, datoPeso As String, datoCliente As String, datoDireccion As String, _
                 total As Integer, codBulto As String, numero As Integer, datoLargo As Integer)
        Dim impresion As New crBulto
        impresion.SetParameterValue(0, datoRuta)
        impresion.SetParameterValue(1, datoMarca)
        impresion.SetParameterValue(2, datoBarra & codBulto & "*")
        impresion.SetParameterValue(3, nroPedido & " - " & numero & "/" & total)
        impresion.SetParameterValue(4, datoDistrito)
        impresion.SetParameterValue(5, datoAgencia)
        impresion.SetParameterValue(6, datoPeso)
        impresion.SetParameterValue(7, datoCliente)
        impresion.SetParameterValue(8, datoDireccion)
        impresion.SetParameterValue(9, datoLargo)

        impresion.PrintToPrinter(1, False, 0, 0)
    End Sub

    Function obtenerTotal(ds As DataSet) As Integer
        Dim total As Integer = 0
        For i = 0 To ds.Tables(0).Rows.Count - 1
            total = total + ds.Tables(0).Rows(i)("DCB_Cantidad").ToString.Trim
        Next
        Return total
    End Function

    Sub mandarImprimir(ds As DataSet, tot As Integer, lar As Integer)
        Dim acumulador As Integer = 1
        For a = 0 To ds.Tables(0).Rows.Count - 1
            Dim cantidad As Integer = ds.Tables(0).Rows(a)("DCB_Cantidad").ToString.Trim
            For b = 0 To cantidad - 1
                imprimir(ds.Tables(0).Rows(a)("RUT_Descripcion").ToString.Trim, ds.Tables(0).Rows(a)("CLI_Marca").ToString.Trim, ds.Tables(0).Rows(a)("Barra").ToString.Trim, _
                         ds.Tables(0).Rows(a)("DCI_Codigo").ToString.Trim, ds.Tables(0).Rows(a)("Ubigeo").ToString.Trim, ds.Tables(0).Rows(a)("AGE_Descripcion").ToString.Trim, _
                         ds.Tables(0).Rows(a)("DCB_PesoBruto").ToString.Trim, ds.Tables(0).Rows(a)("CLI_Descripcion").ToString.Trim, ds.Tables(0).Rows(a)("CLEN_Direccion").ToString.Trim, _
                         tot, ds.Tables(0).Rows(a)("DCB_Codigo").ToString.Trim, acumulador, lar)

                acumulador = acumulador + 1
            Next
        Next
    End Sub

    Sub cambiarEstadoEmbalaje()
        Dim ds As DataSet = servicio1.obtenerArticulosBandejaPedido(txtPedido.Text.Trim)
        If ds.Tables(0).Rows.Count = 0 Then
            Dim dt As DataSet = servicio9.obtenerBandejasXPedido(txtPedido.Text.Trim, "")
            For i = 0 To dt.Tables(0).Rows.Count - 1
                servicio1.liberarBandejas("010100" & dt.Tables(0).Rows(i)("Bandejas").ToString.Trim)
            Next
            servicio9.actualizarEstadoPedido(txtPedido.Text, "08", "P")
            Dim imp As DataSet = servicio4.obtenerImpresionBultos(txtPedido.Text.Trim, "P")
            Dim largo As Integer = servicio1.obtenerCantidadItemsLargos(txtPedido.Text.Trim, "P")
            Dim tot As Integer = obtenerTotal(imp)
            If MsgBox("¿Está seguro de imprimir todos los bultos?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                mandarImprimir(imp, tot, largo)
            End If
            listarXCombo()
        End If
    End Sub

    Private Sub btnEliminar1_Click(sender As System.Object, e As System.EventArgs) Handles btnEliminar1.Click
        If dgvBultos1.Rows.Count <> 0 Then
            eliminar01()
        Else
            mensaje("No hay registros para eliminar.")
        End If
    End Sub

    Private Sub btnEliminar2_Click(sender As System.Object, e As System.EventArgs) Handles btnEliminar2.Click
        If dgvBultosRegistrados.Rows.Count <> 0 Then
            If presionado = True Then
                If MsgBox("¿Esta seguro que desea eliminar el Bulto?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                    eliminar02()
                End If
            Else
                mensaje("No se ha elegido ningún bulto.")
            End If
        Else
            mensaje("No hay registros para eliminar.")
        End If
    End Sub

    Private Sub chkManual_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkManual.CheckedChanged
        If chkManual.Checked = True Then
            dgvArticulos.ReadOnly = False
        Else
            dgvArticulos.ReadOnly = True
            txtCodArticulo.Text = ""
            txtCodArticulo.Focus()
        End If
    End Sub

    Private Sub dgvBultosRegistrados_Click(sender As Object, e As System.EventArgs) Handles dgvBultosRegistrados.Click
        If dgvBultosRegistrados.Rows.Count <> 0 Then
            seleccion = dgvBultosRegistrados.CurrentRow.Index
            bultoCodigo = CInt(dgvBultosRegistrados.Item("Column9", seleccion).Value)
            presionado = True
        End If
    End Sub

    Private Sub dgvBultos1_Click(sender As Object, e As System.EventArgs) Handles dgvBultos1.Click
        seleccion2 = dgvBultos1.CurrentRow.Index
    End Sub

    Private Sub txtCodArticulo_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtCodArticulo.KeyPress
        If chkManual.Checked = False Then
            If e.KeyChar = ChrW(Keys.Enter) Then
                If txtCodArticulo.Text <> "" Then
                    Dim ArtBarra As ArticuloCodigoBarra = servicio7.obtenerDatosBarra(txtCodArticulo.Text.Trim)
                    If ArtBarra Is Nothing Then
                        mensaje("Código de barra no registrado.")
                        txtCodArticulo.Text = ""
                        txtCodArticulo.Focus()
                        Exit Sub
                    End If
                    codBandeja = ""
                    Dim indexArt As Integer = -1
                    Dim i As Integer = 0
                    Dim contador As Integer = 0
                    Dim cantPick As Decimal = 0
                    Dim cantAten As Integer = 0
                    For Each fila As DataGridViewRow In dgvArticulos.Rows
                        If fila.Cells("clm5").Value.ToString.Trim = ArtBarra.ART_Codigo Then
                            contador = contador + 1
                            indexArt = i
                            cantPick = cantPick + fila.Cells("clm4").Value
                            cantAten = cantAten + fila.Cells("clm8").Value
                            If codBandeja <> "" Then
                                codBandeja = ""
                            Else
                                codBandeja = fila.Cells("clm7").Value
                            End If
                        End If
                        i = i + 1
                    Next
                    If contador = 0 Then
                        mensaje("Artículo no encontrado.")
                        Exit Sub
                    End If
                    If contador > 1 Then
                        cargarBandejas(ArtBarra.ART_Codigo)
                        If frmBandeja.ShowDialog() = Windows.Forms.DialogResult.OK Then
                            i = 0
                            indexArt = -1
                            cantPick = 0
                            cantAten = 0
                            For Each fila As DataGridViewRow In dgvArticulos.Rows
                                If fila.Cells("clm5").Value.ToString.Trim = ArtBarra.ART_Codigo And
                                   fila.Cells("clm7").Value.ToString.Trim = codBandeja Then
                                    indexArt = i
                                    cantPick = cantPick + fila.Cells("clm4").Value
                                    cantAten = cantAten + fila.Cells("clm8").Value
                                End If
                                i = i + 1
                            Next
                        Else
                            txtCodArticulo.Text = ""
                            txtCodArticulo.Focus()
                            Exit Sub
                        End If
                    End If
                    If indexArt = -1 Then
                        mensaje("Articulo no encontrado.")
                        Exit Sub
                    End If
                    If cantPick - ArtBarra.Cantidad < 0 Then
                        mensaje("La cantidad ingresada ha excedido lo pickeado.")
                        Exit Sub
                    End If
                    If cantAten - ArtBarra.Cantidad < 0 Then
                        mensaje("La cantidad ingresada ha excedido lo solicitado.")
                        Exit Sub
                    End If
                    Dim beliminar As Boolean = False
                    If cantPick - ArtBarra.Cantidad = 0 Then
                        beliminar = True
                    End If
                    i = 0
                    Dim indexArtBul As Integer = -1
                    For Each fila As DataGridViewRow In dgvBultos1.Rows
                        If fila.Cells("Column4").Value.ToString.Trim = ArtBarra.ART_Codigo And
                           fila.Cells("Column6").Value.ToString.Trim = codBandeja Then
                            indexArtBul = i
                            Exit For
                        End If
                        i = i + 1
                    Next
                    agregar(indexArt, beliminar, indexArtBul, ArtBarra.Cantidad)

                    txtCodArticulo.Text = ""
                    txtCodArticulo.Focus()
                Else
                    txtCodArticulo.Focus()
                End If
            End If
        Else
            txtCodArticulo.Text = ""
            txtCodArticulo.Focus()
        End If
    End Sub

    Private Sub chkBulto_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkBulto.CheckedChanged
        If chkBulto.Checked Then
            activarCabeceraBulto()
        Else
            gbBulto.Enabled = False
            btnEliminar2.Enabled = False
            btnEliminar1.Enabled = True
            txtCodArticulo.Focus()
        End If
    End Sub

    Private Sub dgvBultosRegistrados_CellContentDoubleClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvBultosRegistrados.CellContentDoubleClick
        Dim row As Integer = e.RowIndex
        If row > -1 Then
            Dim codigoBul As Integer = CInt(dgvBultosRegistrados.Item("Column9", row).Value)
            Dim db As DocumentoBulto = servicio4.obtenerBulto(codigoBul)
            frmBulto.lblCodigoBulto.Text = codigoBul
            tipoCaja = db.TCA_Caja
            frmBulto.txtCantidad.Text = db.DCB_Cantidad
            frmBulto.txtCaja.Text = db.DCB_Caja
            frmBulto.txtPrecinto.Text = db.DCB_Precinto
            frmBulto.txtPesoNeto.Text = db.DCB_PesoNeto
            frmBulto.txtPesoBruto.Text = db.DCB_PesoBruto
            frmBulto.txtObservaciones.Text = db.DCB_Observacion
            frmBulto.lblCodigoBulto.Text = codigoBul
            frmBulto.lblPedido.Text = txtPedido.Text
            listarDetalles(codigoBul)

            If frmBulto.ShowDialog() = Windows.Forms.DialogResult.OK Then
                listarArticulosXBandejaXPedido()
            End If
        End If
    End Sub

    Sub listarDetalles(codigo As Integer)
        Dim ds As DataSet = servicio5.obtenerDetalleBulto(codigo)
        frmBulto.dgvModBulto.DataSource = ds.Tables(0)
    End Sub

    Private Sub btnLimpiar_Click(sender As System.Object, e As System.EventArgs) Handles btnLimpiar.Click
        limpiar()
        dgvArticulos.Rows.Clear()
        txtLargos.Text = ""
        txtCantItems.Text = ""
        txtPedido.Text = ""
        txtBandeja.Text = ""
        listarBultos(txtPedido.Text.Trim)
        txtBandeja.Focus()
    End Sub

    Sub listarXCombo()
        dgvPedidosAsignados.Rows.Clear()
        limpiar()
        dgvArticulos.Rows.Clear()
        txtLargos.Text = ""
        txtCantItems.Text = ""
        txtPedido.Text = ""
        txtBandeja.Text = ""
        listarBultos(txtPedido.Text.Trim)
        txtBandeja.Focus()
        Dim ds As DataSet = servicio10.obtenerPedidosBalanza(cboBalanza.SelectedValue.ToString, 1)
        For i = 0 To ds.Tables(0).Rows.Count - 1
            Dim bton As New DataGridViewButtonColumn
            dgvPedidosAsignados.Rows.Add(bton, ds.Tables(0).Rows(i)("DCI_Codigo").ToString, ds.Tables(0).Rows(i)("DCI_Estado").ToString)
            Dim row As DataGridViewRow
            row = dgvPedidosAsignados.Rows.Item(i)
            row.Cells(0).Value = ds.Tables(0).Rows(i)("DCI_Codigo").ToString
        Next
    End Sub

    Private Sub cboBalanza_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles cboBalanza.SelectedValueChanged
        listarXCombo()
    End Sub

    Sub mostrarBandejas(codPedido As String)
        lblBandejas.Text = ""
        Dim ds As DataSet = servicio9.obtenerBandejasXPedido(codPedido, "")
        For i = 0 To ds.Tables(0).Rows.Count - 1
            If lblBandejas.Text = "" Then
                lblBandejas.Text = ds.Tables(0).Rows(i)("Bandejas").ToString.Trim
            Else
                lblBandejas.Text = lblBandejas.Text & " - " & ds.Tables(0).Rows(i)("Bandejas").ToString.Trim
            End If
        Next
    End Sub

    Private Sub dgvPedidosAsignados_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPedidosAsignados.CellContentClick
        Dim row As Integer = e.RowIndex
        If row > -1 Then
            chkManual.Checked = False
            limpiar()
            mostrarBandejas(dgvPedidosAsignados.Rows(row).Cells("Column10").Value)
            txtPedido.Text = dgvPedidosAsignados.Rows(row).Cells("Column10").Value
            txtCantItems.Text = servicio1.obtenerCantidadItems(txtPedido.Text.Trim)
            txtLargos.Text = servicio1.obtenerCantidadItemsLargos(txtPedido.Text.Trim, "P")
            listarArticulosXBandejaXPedido()
            listarBultos(txtPedido.Text)
            txtCodArticulo.Text = ""
            txtCodArticulo.Focus()
        End If
    End Sub

    '//////////////////////////////////////////////////////////////////////////////////////////////////////////////
    '--------------------------------------------------------------------------------------------------------/////
    '********************************************************************************************************/////
    '/////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Dim az As String 'utilizada para almacenar los datos que se reciben por el puerto
    Dim sib As Integer = 0 'sera utilizada como contador
    Dim mensajes As String 'cadena que acumula los datos que van llegando al puerto

    Sub Setup_Puerto_Serie()
        Try
            With SerialPort1
                If .IsOpen Then
                    .Close()
                End If
                .PortName = "COM1"
                .BaudRate = 9600 ' //19200 baud rate
                .DataBits = 8 ' // 8 data bits
                .StopBits = IO.Ports.StopBits.One '// 1 Sotp bit
                .Parity = IO.Ports.Parity.None
                .DtrEnable = False
                .Handshake = IO.Ports.Handshake.None
                .ReadBufferSize = 2048
                .WriteBufferSize = 1024
                .ReceivedBytesThreshold = 1
                .WriteTimeout = 1000
                .Encoding = System.Text.Encoding.Default
                .Open()
            End With
        Catch ex As Exception
            MsgBox("Error al abrir el puerto serial: " & ex.Message, MsgBoxStyle.Critical)
        End Try
    End Sub

    Private Sub SerialPort1_DataReceived(sender As Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Try
            'muestra recepcion de la informacion que envia el puerto
            az = SerialPort1.ReadExisting.Trim
            'acumula la información recepcionada
            mensajes += az
            sib = sib + 1
            'MsgBox("contador :" & sib)
            System.Threading.Thread.Sleep(100)
            'La balanza envía 2 tramas por lo que se debe de mostrar al terminar 
            If sib Mod 2 = 0 Then
                If txtPedido.Text = "" Then
                    MsgBox("Debe seleccionar un Pedido antes de registrar un bulto")
                Else
                    txtCantidad.Text = 1
                    txtCantidad.Refresh()
                    Dim Mensaje1 As String()
                    Mensaje1 = mensajes.Split("kg/G")
                    txtPesoBruto.Text = Mensaje1(0).Trim
                    Mensaje1 = Mensaje1(1).Trim.Split("kg/N")
                    txtPesoNeto.Text = Mensaje1(0).Trim.Substring(3, Mensaje1(0).Trim.Length - 3).Trim
                End If
                'Mensaje
                mensajes = ""
                sib = 0
            End If

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub btnImprimir_Click(sender As System.Object, e As System.EventArgs) Handles btnImprimir.Click
        Dim ds As New articulosBulto

        Dim numeracion As Integer = 0
        For Each fila As DataGridViewRow In dgvBultos1.Rows
            If verificarExitenciaArticulo(fila.Cells("Column4").Value, ds) = False Then
                numeracion = numeracion + 1
                ds.Tables("DetalleBulto").Rows.Add(numeracion, fila.Cells("Column4").Value, fila.Cells("Column2").Value, fila.Cells("Column7").Value, acumularCantidadXArticulo(fila.Cells("Column4").Value))
            End If
        Next

        Dim rpt As New rptListadoItems
        rpt.SetDataSource(ds)
        rpt.PrintToPrinter(1, False, 0, 0)
    End Sub

    Private Function acumularCantidadXArticulo(codArticulo As String) As String
        Dim acumulador As Decimal = 0
        For Each fila As DataGridViewRow In dgvBultos1.Rows
            If fila.Cells("Column4").Value = codArticulo Then
                acumulador = acumulador + CDec(fila.Cells("Column3").Value)
            End If
        Next

        Return Format(Val(acumulador), "##,##0.00")
    End Function

    Private Function verificarExitenciaArticulo(codArticulo As String, ds As DataSet) As Boolean
        Dim valor As Boolean = False

        For i = 0 To ds.Tables("DetalleBulto").Rows.Count - 1
            If ds.Tables("DetalleBulto").Rows(i)("Item").ToString.Trim = codArticulo Then
                valor = True
                Exit For
            End If
        Next

        Return valor
    End Function

End Class